﻿
namespace ObjectPool
{
    /// <summary>
    /// 所有需要被对象池 <see cref="IObjectPool{T}"/> 管理的对象都需要实现该接口
    /// </summary>
    public interface IManaged
    {
        /// <summary>
        /// 初始化。对象第一次放入池前，会调用该方法 <see cref="IObjectPool{T}.Store(T)"/> 。
        /// 若多次放入池中，该方法可能会被多次调用。
        /// <see cref="IObjectPool{T}.Restore(T)"/> 不会调用该方法。
        /// </summary>
        void Init();

        /// <summary>
        /// 清理。注意，该方法可能会被多次调用。对象重新放回池中，或者被释放时该方法都会被调用。
        /// </summary>
        void Clear();
        
    }
}
